function printLabel(labelledObj: { label: string }){
    console.log(labelledObj.label);
}

let myObj = { size: 10, label: "Size 10 Object" };
printLabel(myObj);

/**
 * `LabelledValue` 接口就好比一个名字, 用来描述上面例子里的要求。
 * 它代表有一个对象包含一个名称为`label`,类型为`string`的属性。
 * 
 * 需要注意的是, 我们在这里并不能像其它语言里一样, 说传给 `printLabel`的对象实现了
 * 这个接口。 
 * 我们只会去关注值的外形。 
 * 只要传入的对象满足上面提到的必要条件, 那么它就是被允许的。
 * 
 * 还有一点值得注意的是,类型检查器不会去检查属性的顺序,
 * 只要相应的属性存在并且类型也是对的就可以。
 * 
 */
interface LabelledValue {
    label: string;
}

function printLabel102 (labelledObj: LabelledValue) : void{
    console.log(labelledObj.label);
}

let myObj102 = {size: 10, label: "Size 10 Object"};
printLabel102(myObj102);








